<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<style>

body {
    font-size: 14px;
    font-family: Arial, sans-serif;
}

h1 {
    font-size: 18px;
    display: inline-block;
    margin: 0 1em .5em 0;
}

#helplink {
    display: inline-block;
}

#help {
    display: none;
}

.stats {
    font-size: 60%;
}

table {
    border: 1px solid black;
    table-layout: fixed;
    width: 300px;
}

th, td {
    border: 1px solid black;
    overflow: hidden;
    width: 400px;
    vertical-align: top;
    padding: 5px;
}

td > h2 {
    cursor: pointer;
    font-size: 120%;
    margin: 5px 0px 5px 0px;
}

td.collapsed {
    font-size: 12px;
    width: 12px;
    border: 1px solid white;
    padding: 2px;
    cursor: pointer;
    background: #fafafa;
}

td.collapsed div {
    /* TODO: Flip the direction of the phase's title 90 degrees on a collapsed column. */
    writing-mode: vertical-lr;
    white-space: pre;
}

code, pre, .lines, .ast {
    font-family: Menlo, monospace;
    font-size: 12px;
}

pre {
    -moz-tab-size: 4;
    -o-tab-size:   4;
    tab-size:      4;
}

.allow-x-scroll {
    overflow-x: scroll;
}

.lines {
    float: left;
    overflow: hidden;
    text-align: right;
    margin-top: 7px;
}

.lines div {
    padding-right: 10px;
    color: gray;
}

div.line-number {
    font-size: 12px;
}

.ast {
    white-space: nowrap;
}

td.ssa-prog {
    width: 600px;
    word-wrap: break-word;
}

li {
    list-style-type: none;
}

li.ssa-long-value {
    text-indent: -2em;  /* indent wrapped lines */
}

li.ssa-value-list {
    display: inline;
}

li.ssa-start-block {
    padding: 0;
    margin: 0;
}

li.ssa-end-block {
    padding: 0;
    margin: 0;
}

ul.ssa-print-func {
    padding-left: 0;
}

li.ssa-start-block button {
    padding: 0 1em;
    margin: 0;
    border: none;
    display: inline;
    font-size: 14px;
    float: right;
}

button:hover {
    background-color: #eee;
    cursor: pointer;
}

dl.ssa-gen {
    padding-left: 0;
}

dt.ssa-prog-src {
    padding: 0;
    margin: 0;
    float: left;
    width: 4em;
}

dd.ssa-prog {
    padding: 0;
    margin-right: 0;
    margin-left: 4em;
}

.dead-value {
    color: gray;
}

.dead-block {
    opacity: 0.5;
}

.depcycle {
    font-style: italic;
}

.line-number {
    font-size: 11px;
}

.no-line-number {
    font-size: 11px;
    color: gray;
}

.zoom {
	position: absolute;
	float: left;
	white-space: nowrap;
	background-color: #eee;
}

.zoom a:link, .zoom a:visited  {
    text-decoration: none;
    color: blue;
    font-size: 16px;
    padding: 4px 2px;
}

svg {
    cursor: default;
    outline: 1px solid #eee;
    width: 100%;
}

body.darkmode {
    background-color: rgb(21, 21, 21);
    color: rgb(230, 255, 255);
    opacity: 100%;
}

td.darkmode {
    background-color: rgb(21, 21, 21);
    border: 1px solid gray;
}

body.darkmode table, th {
    border: 1px solid gray;
}

body.darkmode text {
    fill: white;
}

body.darkmode svg polygon:first-child {
    fill: rgb(21, 21, 21);
}

.highlight-aquamarine     { background-color: aquamarine; color: black; }
.highlight-coral          { background-color: coral; color: black; }
.highlight-lightpink      { background-color: lightpink; color: black; }
.highlight-lightsteelblue { background-color: lightsteelblue; color: black; }
.highlight-palegreen      { background-color: palegreen; color: black; }
.highlight-skyblue        { background-color: skyblue; color: black; }
.highlight-lightgray      { background-color: lightgray; color: black; }
.highlight-yellow         { background-color: yellow; color: black; }
.highlight-lime           { background-color: lime; color: black; }
.highlight-khaki          { background-color: khaki; color: black; }
.highlight-aqua           { background-color: aqua; color: black; }
.highlight-salmon         { background-color: salmon; color: black; }

/* Ensure all dead values/blocks continue to have gray font color in dark mode with highlights */
.dead-value span.highlight-aquamarine,
.dead-block.highlight-aquamarine,
.dead-value span.highlight-coral,
.dead-block.highlight-coral,
.dead-value span.highlight-lightpink,
.dead-block.highlight-lightpink,
.dead-value span.highlight-lightsteelblue,
.dead-block.highlight-lightsteelblue,
.dead-value span.highlight-palegreen,
.dead-block.highlight-palegreen,
.dead-value span.highlight-skyblue,
.dead-block.highlight-skyblue,
.dead-value span.highlight-lightgray,
.dead-block.highlight-lightgray,
.dead-value span.highlight-yellow,
.dead-block.highlight-yellow,
.dead-value span.highlight-lime,
.dead-block.highlight-lime,
.dead-value span.highlight-khaki,
.dead-block.highlight-khaki,
.dead-value span.highlight-aqua,
.dead-block.highlight-aqua,
.dead-value span.highlight-salmon,
.dead-block.highlight-salmon {
    color: gray;
}

.outline-blue           { outline: #2893ff solid 2px; }
.outline-red            { outline: red solid 2px; }
.outline-blueviolet     { outline: blueviolet solid 2px; }
.outline-darkolivegreen { outline: darkolivegreen solid 2px; }
.outline-fuchsia        { outline: fuchsia solid 2px; }
.outline-sienna         { outline: sienna solid 2px; }
.outline-gold           { outline: gold solid 2px; }
.outline-orangered      { outline: orangered solid 2px; }
.outline-teal           { outline: teal solid 2px; }
.outline-maroon         { outline: maroon solid 2px; }
.outline-black          { outline: black solid 2px; }

ellipse.outline-blue           { stroke-width: 2px; stroke: #2893ff; }
ellipse.outline-red            { stroke-width: 2px; stroke: red; }
ellipse.outline-blueviolet     { stroke-width: 2px; stroke: blueviolet; }
ellipse.outline-darkolivegreen { stroke-width: 2px; stroke: darkolivegreen; }
ellipse.outline-fuchsia        { stroke-width: 2px; stroke: fuchsia; }
ellipse.outline-sienna         { stroke-width: 2px; stroke: sienna; }
ellipse.outline-gold           { stroke-width: 2px; stroke: gold; }
ellipse.outline-orangered      { stroke-width: 2px; stroke: orangered; }
ellipse.outline-teal           { stroke-width: 2px; stroke: teal; }
ellipse.outline-maroon         { stroke-width: 2px; stroke: maroon; }
ellipse.outline-black          { stroke-width: 2px; stroke: black; }

/* Capture alternative for outline-black and ellipse.outline-black when in dark mode */
body.darkmode .outline-black        { outline: gray solid 2px; }
body.darkmode ellipse.outline-black { outline: gray solid 2px; }

</style>

<script type="text/javascript">
// ordered list of all available highlight colors
var highlights = [
    "highlight-aquamarine",
    "highlight-coral",
    "highlight-lightpink",
    "highlight-lightsteelblue",
    "highlight-palegreen",
    "highlight-skyblue",
    "highlight-lightgray",
    "highlight-yellow",
    "highlight-lime",
    "highlight-khaki",
    "highlight-aqua",
    "highlight-salmon"
];

// state: which value is highlighted this color?
var highlighted = {};
for (var i = 0; i < highlights.length; i++) {
    highlighted[highlights[i]] = "";
}

// ordered list of all available outline colors
var outlines = [
    "outline-blue",
    "outline-red",
    "outline-blueviolet",
    "outline-darkolivegreen",
    "outline-fuchsia",
    "outline-sienna",
    "outline-gold",
    "outline-orangered",
    "outline-teal",
    "outline-maroon",
    "outline-black"
];

// state: which value is outlined this color?
var outlined = {};
for (var i = 0; i < outlines.length; i++) {
    outlined[outlines[i]] = "";
}

window.onload = function() {
    if (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches) {
        toggleDarkMode();
        document.getElementById("dark-mode-button").checked = true;
    }

    var ssaElemClicked = function(elem, event, selections, selected) {
        event.stopPropagation();

        // TODO: pushState with updated state and read it on page load,
        // so that state can survive across reloads

        // find all values with the same name
        var c = elem.classList.item(0);
        var x = document.getElementsByClassName(c);

        // if selected, remove selections from all of them
        // otherwise, attempt to add

        var remove = "";
        for (var i = 0; i < selections.length; i++) {
            var color = selections[i];
            if (selected[color] == c) {
                remove = color;
                break;
            }
        }

        if (remove != "") {
            for (var i = 0; i < x.length; i++) {
                x[i].classList.remove(remove);
            }
            selected[remove] = "";
            return;
        }

        // we're adding a selection
        // find first available color
        var avail = "";
        for (var i = 0; i < selections.length; i++) {
            var color = selections[i];
            if (selected[color] == "") {
                avail = color;
                break;
            }
        }
        if (avail == "") {
            alert("out of selection colors; go add more");
            return;
        }

        // set that as the selection
        for (var i = 0; i < x.length; i++) {
            x[i].classList.add(avail);
        }
        selected[avail] = c;
    };

    var ssaValueClicked = function(event) {
        ssaElemClicked(this, event, highlights, highlighted);
    };

    var ssaBlockClicked = function(event) {
        ssaElemClicked(this, event, outlines, outlined);
    };

    var ssavalues = document.getElementsByClassName("ssa-value");
    for (var i = 0; i < ssavalues.length; i++) {
        ssavalues[i].addEventListener('click', ssaValueClicked);
    }

    var ssalongvalues = document.getElementsByClassName("ssa-long-value");
    for (var i = 0; i < ssalongvalues.length; i++) {
        // don't attach listeners to li nodes, just the spans they contain
        if (ssalongvalues[i].nodeName == "SPAN") {
            ssalongvalues[i].addEventListener('click', ssaValueClicked);
        }
    }

    var ssablocks = document.getElementsByClassName("ssa-block");
    for (var i = 0; i < ssablocks.length; i++) {
        ssablocks[i].addEventListener('click', ssaBlockClicked);
    }

    var lines = document.getElementsByClassName("line-number");
    for (var i = 0; i < lines.length; i++) {
        lines[i].addEventListener('click', ssaValueClicked);
    }

    // Contains phase names which are expanded by default. Other columns are collapsed.
    var expandedDefault = [
        "start",
        "deadcode",
        "opt",
        "lower",
        "late-deadcode",
        "regalloc",
        "genssa",
    ];

    function toggler(phase) {
        return function() {
            toggle_cell(phase+'-col');
            toggle_cell(phase+'-exp');
        };
    }

    function toggle_cell(id) {
        var e = document.getElementById(id);
        if (e.style.display == 'table-cell') {
            e.style.display = 'none';
        } else {
            e.style.display = 'table-cell';
        }
    }

    // Go through all columns and collapse needed phases.
    const td = document.getElementsByTagName("td");
    for (let i = 0; i < td.length; i++) {
        const id = td[i].id;
        const phase = id.substr(0, id.length-4);
        let show = expandedDefault.indexOf(phase) !== -1

        // If show == false, check to see if this is a combined column (multiple phases).
        // If combined, check each of the phases to see if they are in our expandedDefaults.
        // If any are found, that entire combined column gets shown.
        if (!show) {
            const combined = phase.split('--+--');
            const len = combined.length;
            if (len > 1) {
                for (let i = 0; i < len; i++) {
                    if (expandedDefault.indexOf(combined[i]) !== -1) {
                        show = true;
                        break;
                    }
                }
            }
        }
        if (id.endsWith("-exp")) {
            const h2Els = td[i].getElementsByTagName("h2");
            const len = h2Els.length;
            if (len > 0) {
                for (let i = 0; i < len; i++) {
                    h2Els[i].addEventListener('click', toggler(phase));
                }
            }
        } else {
            td[i].addEventListener('click', toggler(phase));
        }
        if (id.endsWith("-col") && show || id.endsWith("-exp") && !show) {
            td[i].style.display = 'none';
            continue;
        }
        td[i].style.display = 'table-cell';
    }

    // find all svg block nodes, add their block classes
    var nodes = document.querySelectorAll('*[id^="graph_node_"]');
    for (var i = 0; i < nodes.length; i++) {
    	var node = nodes[i];
    	var name = node.id.toString();
    	var block = name.substring(name.lastIndexOf("_")+1);
    	node.classList.remove("node");
    	node.classList.add(block);
        node.addEventListener('click', ssaBlockClicked);
        var ellipse = node.getElementsByTagName('ellipse')[0];
        ellipse.classList.add(block);
        ellipse.addEventListener('click', ssaBlockClicked);
    }

    // make big graphs smaller
    var targetScale = 0.5;
    var nodes = document.querySelectorAll('*[id^="svg_graph_"]');
    // TODO: Implement smarter auto-zoom using the viewBox attribute
    // and in case of big graphs set the width and height of the svg graph to
    // maximum allowed.
    for (var i = 0; i < nodes.length; i++) {
    	var node = nodes[i];
    	var name = node.id.toString();
    	var phase = name.substring(name.lastIndexOf("_")+1);
    	var gNode = document.getElementById("g_graph_"+phase);
    	var scale = gNode.transform.baseVal.getItem(0).matrix.a;
    	if (scale > targetScale) {
    		node.width.baseVal.value *= targetScale / scale;
    		node.height.baseVal.value *= targetScale / scale;
    	}
    }
};

function toggle_visibility(id) {
    var e = document.getElementById(id);
    if (e.style.display == 'block') {
        e.style.display = 'none';
    } else {
        e.style.display = 'block';
    }
}

function hideBlock(el) {
    var es = el.parentNode.parentNode.getElementsByClassName("ssa-value-list");
    if (es.length===0)
        return;
    var e = es[0];
    if (e.style.display === 'block' || e.style.display === '') {
        e.style.display = 'none';
        el.innerHTML = '+';
    } else {
        e.style.display = 'block';
        el.innerHTML = '-';
    }
}

// TODO: scale the graph with the viewBox attribute.
function graphReduce(id) {
    var node = document.getElementById(id);
    if (node) {
    		node.width.baseVal.value *= 0.9;
    		node.height.baseVal.value *= 0.9;
    }
    return false;
}

function graphEnlarge(id) {
    var node = document.getElementById(id);
    if (node) {
    		node.width.baseVal.value *= 1.1;
    		node.height.baseVal.value *= 1.1;
    }
    return false;
}

function makeDraggable(event) {
    var svg = event.target;
    if (window.PointerEvent) {
        svg.addEventListener('pointerdown', startDrag);
        svg.addEventListener('pointermove', drag);
        svg.addEventListener('pointerup', endDrag);
        svg.addEventListener('pointerleave', endDrag);
    } else {
        svg.addEventListener('mousedown', startDrag);
        svg.addEventListener('mousemove', drag);
        svg.addEventListener('mouseup', endDrag);
        svg.addEventListener('mouseleave', endDrag);
    }

    var point = svg.createSVGPoint();
    var isPointerDown = false;
    var pointerOrigin;
    var viewBox = svg.viewBox.baseVal;

    function getPointFromEvent (event) {
        point.x = event.clientX;
        point.y = event.clientY;

        // We get the current transformation matrix of the SVG and we inverse it
        var invertedSVGMatrix = svg.getScreenCTM().inverse();
        return point.matrixTransform(invertedSVGMatrix);
    }

    function startDrag(event) {
        isPointerDown = true;
        pointerOrigin = getPointFromEvent(event);
    }

    function drag(event) {
        if (!isPointerDown) {
            return;
        }
        event.preventDefault();

        var pointerPosition = getPointFromEvent(event);
        viewBox.x -= (pointerPosition.x - pointerOrigin.x);
        viewBox.y -= (pointerPosition.y - pointerOrigin.y);
    }

    function endDrag(event) {
        isPointerDown = false;
    }
}

function toggleDarkMode() {
    document.body.classList.toggle('darkmode');

    // Collect all of the "collapsed" elements and apply dark mode on each collapsed column
    const collapsedEls = document.getElementsByClassName('collapsed');
    const len = collapsedEls.length;

    for (let i = 0; i < len; i++) {
        collapsedEls[i].classList.toggle('darkmode');
    }

    // Collect and spread the appropriate elements from all of the svgs on the page into one array
    const svgParts = [
        ...document.querySelectorAll('path'),
        ...document.querySelectorAll('ellipse'),
        ...document.querySelectorAll('polygon'),
    ];

    // Iterate over the svgParts specifically looking for white and black fill/stroke to be toggled.
    // The verbose conditional is intentional here so that we do not mutate any svg path, ellipse, or polygon that is of any color other than white or black.
    svgParts.forEach(el => {
        if (el.attributes.stroke.value === 'white') {
            el.attributes.stroke.value = 'black';
        } else if (el.attributes.stroke.value === 'black') {
            el.attributes.stroke.value = 'white';
        }
        if (el.attributes.fill.value === 'white') {
            el.attributes.fill.value = 'black';
        } else if (el.attributes.fill.value === 'black') {
            el.attributes.fill.value = 'white';
        }
    });
}

</script>

</head><body><h1>Func</h1>
<a href="#" onclick="toggle_visibility('help');return false;" id="helplink">help</a>
<div id="help">

<p>
Click on a value or block to toggle highlighting of that value/block
and its uses.  (Values and blocks are highlighted by ID, and IDs of
dead items may be reused, so not all highlights necessarily correspond
to the clicked item.)
</p>

<p>
Faded out values and blocks are dead code that has not been eliminated.
</p>

<p>
Values printed in italics have a dependency cycle.
</p>

<p>
<b>CFG</b>: Dashed edge is for unlikely branches. Blue color is for backward edges.
Edge with a dot means that this edge follows the order in which blocks were laidout.
</p>

</div>
<label for="dark-mode-button" style="margin-left: 15px; cursor: pointer;">darkmode</label>
<input type="checkbox" onclick="toggleDarkMode();" id="dark-mode-button" style="cursor: pointer" />
<table><tr><td id="sources-col" class="collapsed"><div>sources</div></td><td id="sources-exp" class="allow-x-scroll"><h2>sources</h2><div class="lines" style="width: 8%"><div>&nbsp;</div><div>&nbsp;</div><div class="l3 line-number">3</div><div class="l4 line-number">4</div><div class="l5 line-number">5</div><div class="l6 line-number">6</div></div><div style="width: 92%"><pre><div>&nbsp;</div><div><strong>/Users/mac/go/src/gitee.com/shirdonl/goAdvanced/chapter2/2.3.4-compiler_debug.go</strong></div><div class="l3 line-number">func Func(x, y int) int {</div><div class="l4 line-number">	z := 6</div><div class="l5 line-number">	return x*8 + y*z</div><div class="l6 line-number">}</div></pre></div></td>
<td id="AST-col" class="collapsed"><div>AST</div></td><td id="AST-exp" class="allow-x-scroll"><h2>AST</h2><div><div class="ast"><b>buildssa-enter</b></div><div class="l3 line-number ast">.   AS l(3)</div><div class="l3 line-number ast">.   .   NAME-main.~r2 g(1) l(3) x(16) class(PPARAMOUT) esc(no) int</div><div class="ast"><b>buildssa-body</b></div><div class="l4 line-number ast">.   DCL l(4)</div><div class="l4 line-number ast">.   .   NAME-main.z g(4) l(4) x(0) class(PAUTO) esc(no) tc(1) used int</div><div class="ast">&nbsp;</div><div class="l4 line-number ast">.   AS l(4) colas(true) tc(1)</div><div class="l4 line-number ast">.   .   NAME-main.z g(4) l(4) x(0) class(PAUTO) esc(no) tc(1) used int</div><div class="l4 line-number ast">.   .   LITERAL-6 l(4) tc(1) int</div><div class="ast">&nbsp;</div><div class="l5 line-number ast">.   RETURN l(5) tc(1)</div><div class="ast">.   RETURN-list</div><div class="l5 line-number ast">.   .   AS l(5) tc(1)</div><div class="l3 line-number ast">.   .   .   NAME-main.~r2 g(1) l(3) x(16) class(PPARAMOUT) esc(no) int</div><div class="l5 line-number ast">.   .   .   ADD l(5) tc(1) int</div><div class="l5 line-number ast">.   .   .   .   MUL l(5) tc(1) int</div><div class="l3 line-number ast">.   .   .   .   .   NAME-main.x g(2) l(3) x(0) class(PPARAM) esc(no) tc(1) used int</div><div class="l5 line-number ast">.   .   .   .   .   LITERAL-8 l(5) tc(1) int</div><div class="l5 line-number ast">.   .   .   .   MUL l(5) tc(1) int</div><div class="l3 line-number ast">.   .   .   .   .   NAME-main.y g(3) l(3) x(8) class(PPARAM) esc(no) tc(1) used int</div><div class="l4 line-number ast">.   .   .   .   .   NAME-main.z g(4) l(4) x(0) class(PAUTO) esc(no) tc(1) used int</div><div class="ast"><b>buildssa-exit</b></div><div class="ast">&nbsp;</div></div></td>
<td id="start-col" class="collapsed"><div>start</div></td><td id="start-exp" class="hash-"><h2>start</h2><code><ul class="b1 ssa-print-func "><li class="ssa-start-block"><span class="b1 ssa-block">b1</span>:<button onclick="hideBlock(this)">-</button></li><li class="ssa-value-list"><ul><li class="ssa-long-value "><span class="v1 ssa-long-value"><span class="v1 ssa-value">v1</span> <span class="no-line-number">(?)</span> = InitMem &lt;mem&gt;</span></li><li class="ssa-long-value "><span class="v2 ssa-long-value"><span class="v2 ssa-value">v2</span> <span class="no-line-number">(?)</span> = SP &lt;uintptr&gt;</span></li><li class="ssa-long-value dead-value"><span class="v3 ssa-long-value"><span class="v3 ssa-value">v3</span> <span class="no-line-number">(?)</span> = SB &lt;uintptr&gt;</span></li><li class="ssa-long-value dead-value"><span class="v4 ssa-long-value"><span class="v4 ssa-value">v4</span> <span class="no-line-number">(?)</span> = LocalAddr &lt;*int&gt; {x} <span class="v2 ssa-value">v2</span> <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value dead-value"><span class="v5 ssa-long-value"><span class="v5 ssa-value">v5</span> <span class="no-line-number">(?)</span> = LocalAddr &lt;*int&gt; {y} <span class="v2 ssa-value">v2</span> <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v6 ssa-long-value"><span class="v6 ssa-value">v6</span> <span class="no-line-number">(?)</span> = LocalAddr &lt;*int&gt; {~r2} <span class="v2 ssa-value">v2</span> <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v7 ssa-long-value"><span class="v7 ssa-value">v7</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {x} (x[int])</span></li><li class="ssa-long-value "><span class="v8 ssa-long-value"><span class="v8 ssa-value">v8</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {y} (y[int])</span></li><li class="ssa-long-value dead-value"><span class="v9 ssa-long-value"><span class="v9 ssa-value">v9</span> <span class="no-line-number">(?)</span> = Const64 &lt;int&gt; [0]</span></li><li class="ssa-long-value "><span class="v10 ssa-long-value"><span class="v10 ssa-value">v10</span> <span class="no-line-number">(?)</span> = Const64 &lt;int&gt; [6] (z[int])</span></li><li class="ssa-long-value "><span class="v11 ssa-long-value"><span class="v11 ssa-value">v11</span> <span class="no-line-number">(?)</span> = Const64 &lt;int&gt; [8]</span></li><li class="ssa-long-value "><span class="v12 ssa-long-value"><span class="v12 ssa-value">v12</span> <span class="l5 line-number">(5)</span> = Mul64 &lt;int&gt; <span class="v7 ssa-value">v7</span> <span class="v11 ssa-value">v11</span></span></li><li class="ssa-long-value "><span class="v13 ssa-long-value"><span class="v13 ssa-value">v13</span> <span class="l5 line-number">(5)</span> = Mul64 &lt;int&gt; <span class="v8 ssa-value">v8</span> <span class="v10 ssa-value">v10</span></span></li><li class="ssa-long-value "><span class="v14 ssa-long-value"><span class="v14 ssa-value">v14</span> <span class="l5 line-number">(5)</span> = Add64 &lt;int&gt; <span class="v12 ssa-value">v12</span> <span class="v13 ssa-value">v13</span></span></li><li class="ssa-long-value "><span class="v15 ssa-long-value"><span class="v15 ssa-value">v15</span> <span class="l5 line-number">(<s>5</s>)</span> = VarDef &lt;mem&gt; {~r2} <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v16 ssa-long-value"><span class="v16 ssa-value">v16</span> <span class="l5 line-number">(5)</span> = Store &lt;mem&gt; {int} <span class="v6 ssa-value">v6</span> <span class="v14 ssa-value">v14</span> <span class="v15 ssa-value">v15</span></span></li></ul></li><li class="ssa-end-block"><span class="b1 ssa-block">Ret</span> <span class="v16 ssa-value">v16</span> <span class="l5 line-number">(<b>+5</b>)</span></li></ul><li>name x[int]: <span class="v7 ssa-value">v7</span> </li><li>name y[int]: <span class="v8 ssa-value">v8</span> </li><li>name z[int]: <span class="v10 ssa-value">v10</span> </li></code></td>
<td id="number-lines--+--early-phielim--+--early-copyelim--+--early-deadcode-col" class="collapsed"><div>number lines  +  early phielim  +  early copyelim  +  early deadcode</div></td><td id="number-lines--+--early-phielim--+--early-copyelim--+--early-deadcode-exp" class="hash-81507e0a2ceee14a7e51f57f1a97ba9f63a98297f79b34228570cca33bbf46ee"><h2>number lines <span class="stats">[4100 ns]</span></h2><h2>early phielim <span class="stats">[569 ns]</span></h2><h2>early copyelim <span class="stats">[710 ns]</span></h2><h2>early deadcode <span class="stats">[5289 ns]</span></h2><code><ul class="b1 ssa-print-func "><li class="ssa-start-block"><span class="b1 ssa-block">b1</span>:<button onclick="hideBlock(this)">-</button></li><li class="ssa-value-list"><ul><li class="ssa-long-value "><span class="v1 ssa-long-value"><span class="v1 ssa-value">v1</span> <span class="no-line-number">(?)</span> = InitMem &lt;mem&gt;</span></li><li class="ssa-long-value "><span class="v2 ssa-long-value"><span class="v2 ssa-value">v2</span> <span class="no-line-number">(?)</span> = SP &lt;uintptr&gt;</span></li><li class="ssa-long-value "><span class="v6 ssa-long-value"><span class="v6 ssa-value">v6</span> <span class="no-line-number">(?)</span> = LocalAddr &lt;*int&gt; {~r2} <span class="v2 ssa-value">v2</span> <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v7 ssa-long-value"><span class="v7 ssa-value">v7</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {x} (x[int])</span></li><li class="ssa-long-value "><span class="v8 ssa-long-value"><span class="v8 ssa-value">v8</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {y} (y[int])</span></li><li class="ssa-long-value "><span class="v10 ssa-long-value"><span class="v10 ssa-value">v10</span> <span class="no-line-number">(?)</span> = Const64 &lt;int&gt; [6] (z[int])</span></li><li class="ssa-long-value "><span class="v11 ssa-long-value"><span class="v11 ssa-value">v11</span> <span class="no-line-number">(?)</span> = Const64 &lt;int&gt; [8]</span></li><li class="ssa-long-value "><span class="v12 ssa-long-value"><span class="v12 ssa-value">v12</span> <span class="l5 line-number">(<b>+5</b>)</span> = Mul64 &lt;int&gt; <span class="v7 ssa-value">v7</span> <span class="v11 ssa-value">v11</span></span></li><li class="ssa-long-value "><span class="v13 ssa-long-value"><span class="v13 ssa-value">v13</span> <span class="l5 line-number">(5)</span> = Mul64 &lt;int&gt; <span class="v8 ssa-value">v8</span> <span class="v10 ssa-value">v10</span></span></li><li class="ssa-long-value "><span class="v14 ssa-long-value"><span class="v14 ssa-value">v14</span> <span class="l5 line-number">(5)</span> = Add64 &lt;int&gt; <span class="v12 ssa-value">v12</span> <span class="v13 ssa-value">v13</span></span></li><li class="ssa-long-value "><span class="v15 ssa-long-value"><span class="v15 ssa-value">v15</span> <span class="l5 line-number">(<s>5</s>)</span> = VarDef &lt;mem&gt; {~r2} <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v16 ssa-long-value"><span class="v16 ssa-value">v16</span> <span class="l5 line-number">(5)</span> = Store &lt;mem&gt; {int} <span class="v6 ssa-value">v6</span> <span class="v14 ssa-value">v14</span> <span class="v15 ssa-value">v15</span></span></li></ul></li><li class="ssa-end-block"><span class="b1 ssa-block">Ret</span> <span class="v16 ssa-value">v16</span> <span class="l5 line-number">(<b>+5</b>)</span></li></ul><li>name x[int]: <span class="v7 ssa-value">v7</span> </li><li>name y[int]: <span class="v8 ssa-value">v8</span> </li><li>name z[int]: <span class="v10 ssa-value">v10</span> </li></code></td>
<td id="short-circuit--+--decompose-args--+--decompose-user--+--pre-opt-deadcode--+--opt-col" class="collapsed"><div>short circuit  +  decompose args  +  decompose user  +  pre-opt deadcode  +  opt</div></td><td id="short-circuit--+--decompose-args--+--decompose-user--+--pre-opt-deadcode--+--opt-exp" class="hash-240e5d97e0642f65f6d78f3739a65ad50637e3b2a226e6c7845908fdc158378d"><h2>short circuit <span class="stats">[581 ns]</span></h2><h2>decompose args <span class="stats">[178610 ns]</span></h2><h2>decompose user <span class="stats">[364 ns]</span></h2><h2>pre-opt deadcode <span class="stats">[2868 ns]</span></h2><h2>opt <span class="stats">[765482 ns]</span></h2><code><ul class="b1 ssa-print-func "><li class="ssa-start-block"><span class="b1 ssa-block">b1</span>:<button onclick="hideBlock(this)">-</button></li><li class="ssa-value-list"><ul><li class="ssa-long-value "><span class="v1 ssa-long-value"><span class="v1 ssa-value">v1</span> <span class="no-line-number">(?)</span> = InitMem &lt;mem&gt;</span></li><li class="ssa-long-value "><span class="v2 ssa-long-value"><span class="v2 ssa-value">v2</span> <span class="no-line-number">(?)</span> = SP &lt;uintptr&gt;</span></li><li class="ssa-long-value "><span class="v6 ssa-long-value"><span class="v6 ssa-value">v6</span> <span class="no-line-number">(?)</span> = LocalAddr &lt;*int&gt; {~r2} <span class="v2 ssa-value">v2</span> <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v7 ssa-long-value"><span class="v7 ssa-value">v7</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {x} (x[int])</span></li><li class="ssa-long-value "><span class="v8 ssa-long-value"><span class="v8 ssa-value">v8</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {y} (y[int])</span></li><li class="ssa-long-value "><span class="v10 ssa-long-value"><span class="v10 ssa-value">v10</span> <span class="no-line-number">(?)</span> = Const64 &lt;int&gt; [6] (z[int])</span></li><li class="ssa-long-value dead-value"><span class="v11 ssa-long-value"><span class="v11 ssa-value">v11</span> <span class="no-line-number">(?)</span> = Const64 &lt;int&gt; [8]</span></li><li class="ssa-long-value "><span class="v13 ssa-long-value"><span class="v13 ssa-value">v13</span> <span class="l5 line-number">(5)</span> = Mul64 &lt;int&gt; <span class="v8 ssa-value">v8</span> <span class="v10 ssa-value">v10</span></span></li><li class="ssa-long-value "><span class="v15 ssa-long-value"><span class="v15 ssa-value">v15</span> <span class="l5 line-number">(<s>5</s>)</span> = VarDef &lt;mem&gt; {~r2} <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v9 ssa-long-value"><span class="v9 ssa-value">v9</span> <span class="l5 line-number">(<b>+5</b>)</span> = Const64 &lt;uint64&gt; [3]</span></li><li class="ssa-long-value "><span class="v12 ssa-long-value"><span class="v12 ssa-value">v12</span> <span class="l5 line-number">(<b>+5</b>)</span> = Lsh64x64 &lt;int&gt; [false] <span class="v7 ssa-value">v7</span> <span class="v9 ssa-value">v9</span></span></li><li class="ssa-long-value "><span class="v14 ssa-long-value"><span class="v14 ssa-value">v14</span> <span class="l5 line-number">(5)</span> = Add64 &lt;int&gt; <span class="v12 ssa-value">v12</span> <span class="v13 ssa-value">v13</span></span></li><li class="ssa-long-value "><span class="v16 ssa-long-value"><span class="v16 ssa-value">v16</span> <span class="l5 line-number">(5)</span> = Store &lt;mem&gt; {int} <span class="v6 ssa-value">v6</span> <span class="v14 ssa-value">v14</span> <span class="v15 ssa-value">v15</span></span></li></ul></li><li class="ssa-end-block"><span class="b1 ssa-block">Ret</span> <span class="v16 ssa-value">v16</span> <span class="l5 line-number">(<b>+5</b>)</span></li></ul><li>name x[int]: <span class="v7 ssa-value">v7</span> </li><li>name y[int]: <span class="v8 ssa-value">v8</span> </li><li>name z[int]: <span class="v10 ssa-value">v10</span> </li></code></td>
<td id="zero-arg-cse--+--opt-deadcode-col" class="collapsed"><div>zero arg cse  +  opt deadcode</div></td><td id="zero-arg-cse--+--opt-deadcode-exp" class="hash-3378f2dcad5bf23f9e66e2ecfe55a1092db41c4b2922c8b9db07020782a781de"><h2>zero arg cse <span class="stats">[3706 ns]</span></h2><h2>opt deadcode <span class="stats">[3215 ns]</span></h2><code><ul class="b1 ssa-print-func "><li class="ssa-start-block"><span class="b1 ssa-block">b1</span>:<button onclick="hideBlock(this)">-</button></li><li class="ssa-value-list"><ul><li class="ssa-long-value "><span class="v1 ssa-long-value"><span class="v1 ssa-value">v1</span> <span class="no-line-number">(?)</span> = InitMem &lt;mem&gt;</span></li><li class="ssa-long-value "><span class="v2 ssa-long-value"><span class="v2 ssa-value">v2</span> <span class="no-line-number">(?)</span> = SP &lt;uintptr&gt;</span></li><li class="ssa-long-value "><span class="v6 ssa-long-value"><span class="v6 ssa-value">v6</span> <span class="no-line-number">(?)</span> = LocalAddr &lt;*int&gt; {~r2} <span class="v2 ssa-value">v2</span> <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v7 ssa-long-value"><span class="v7 ssa-value">v7</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {x} (x[int])</span></li><li class="ssa-long-value "><span class="v8 ssa-long-value"><span class="v8 ssa-value">v8</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {y} (y[int])</span></li><li class="ssa-long-value "><span class="v10 ssa-long-value"><span class="v10 ssa-value">v10</span> <span class="no-line-number">(?)</span> = Const64 &lt;int&gt; [6] (z[int])</span></li><li class="ssa-long-value "><span class="v13 ssa-long-value"><span class="v13 ssa-value">v13</span> <span class="l5 line-number">(5)</span> = Mul64 &lt;int&gt; <span class="v8 ssa-value">v8</span> <span class="v10 ssa-value">v10</span></span></li><li class="ssa-long-value "><span class="v15 ssa-long-value"><span class="v15 ssa-value">v15</span> <span class="l5 line-number">(<s>5</s>)</span> = VarDef &lt;mem&gt; {~r2} <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v9 ssa-long-value"><span class="v9 ssa-value">v9</span> <span class="l5 line-number">(<b>+5</b>)</span> = Const64 &lt;uint64&gt; [3]</span></li><li class="ssa-long-value "><span class="v12 ssa-long-value"><span class="v12 ssa-value">v12</span> <span class="l5 line-number">(<b>+5</b>)</span> = Lsh64x64 &lt;int&gt; [false] <span class="v7 ssa-value">v7</span> <span class="v9 ssa-value">v9</span></span></li><li class="ssa-long-value "><span class="v14 ssa-long-value"><span class="v14 ssa-value">v14</span> <span class="l5 line-number">(5)</span> = Add64 &lt;int&gt; <span class="v12 ssa-value">v12</span> <span class="v13 ssa-value">v13</span></span></li><li class="ssa-long-value "><span class="v16 ssa-long-value"><span class="v16 ssa-value">v16</span> <span class="l5 line-number">(5)</span> = Store &lt;mem&gt; {int} <span class="v6 ssa-value">v6</span> <span class="v14 ssa-value">v14</span> <span class="v15 ssa-value">v15</span></span></li></ul></li><li class="ssa-end-block"><span class="b1 ssa-block">Ret</span> <span class="v16 ssa-value">v16</span> <span class="l5 line-number">(<b>+5</b>)</span></li></ul><li>name x[int]: <span class="v7 ssa-value">v7</span> </li><li>name y[int]: <span class="v8 ssa-value">v8</span> </li><li>name z[int]: <span class="v10 ssa-value">v10</span> </li></code></td>
<td id="generic-cse--+--phiopt--+--gcse-deadcode--+--nilcheckelim--+--prove-col" class="collapsed"><div>generic cse  +  phiopt  +  gcse deadcode  +  nilcheckelim  +  prove</div></td><td id="generic-cse--+--phiopt--+--gcse-deadcode--+--nilcheckelim--+--prove-exp" class="hash-1b511c04d8d070814a224cbcef17510784dd66b66ca61f6f88c6af987a133e16"><h2>generic cse <span class="stats">[17485 ns]</span></h2><h2>phiopt <span class="stats">[225 ns]</span></h2><h2>gcse deadcode <span class="stats">[2114 ns]</span></h2><h2>nilcheckelim <span class="stats">[1901 ns]</span></h2><h2>prove <span class="stats">[8369 ns]</span></h2><code><ul class="b1 ssa-print-func "><li class="ssa-start-block"><span class="b1 ssa-block">b1</span>:<button onclick="hideBlock(this)">-</button></li><li class="ssa-value-list"><ul><li class="ssa-long-value "><span class="v1 ssa-long-value"><span class="v1 ssa-value">v1</span> <span class="no-line-number">(?)</span> = InitMem &lt;mem&gt;</span></li><li class="ssa-long-value "><span class="v2 ssa-long-value"><span class="v2 ssa-value">v2</span> <span class="no-line-number">(?)</span> = SP &lt;uintptr&gt;</span></li><li class="ssa-long-value "><span class="v6 ssa-long-value"><span class="v6 ssa-value">v6</span> <span class="no-line-number">(?)</span> = LocalAddr &lt;*int&gt; {~r2} <span class="v2 ssa-value">v2</span> <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v7 ssa-long-value"><span class="v7 ssa-value">v7</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {x} (x[int])</span></li><li class="ssa-long-value "><span class="v8 ssa-long-value"><span class="v8 ssa-value">v8</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {y} (y[int])</span></li><li class="ssa-long-value "><span class="v10 ssa-long-value"><span class="v10 ssa-value">v10</span> <span class="no-line-number">(?)</span> = Const64 &lt;int&gt; [6] (z[int])</span></li><li class="ssa-long-value "><span class="v13 ssa-long-value"><span class="v13 ssa-value">v13</span> <span class="l5 line-number">(5)</span> = Mul64 &lt;int&gt; <span class="v8 ssa-value">v8</span> <span class="v10 ssa-value">v10</span></span></li><li class="ssa-long-value "><span class="v15 ssa-long-value"><span class="v15 ssa-value">v15</span> <span class="l5 line-number">(<s>5</s>)</span> = VarDef &lt;mem&gt; {~r2} <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v9 ssa-long-value"><span class="v9 ssa-value">v9</span> <span class="l5 line-number">(<b>+5</b>)</span> = Const64 &lt;uint64&gt; [3]</span></li><li class="ssa-long-value dead-value"><span class="v11 ssa-long-value"><span class="v11 ssa-value">v11</span> <span class="no-line-number">(?)</span> = Const64 &lt;int64&gt; [0]</span></li><li class="ssa-long-value "><span class="v12 ssa-long-value"><span class="v12 ssa-value">v12</span> <span class="l5 line-number">(<b>+5</b>)</span> = Lsh64x64 &lt;int&gt; [false] <span class="v7 ssa-value">v7</span> <span class="v9 ssa-value">v9</span></span></li><li class="ssa-long-value "><span class="v14 ssa-long-value"><span class="v14 ssa-value">v14</span> <span class="l5 line-number">(5)</span> = Add64 &lt;int&gt; <span class="v12 ssa-value">v12</span> <span class="v13 ssa-value">v13</span></span></li><li class="ssa-long-value "><span class="v16 ssa-long-value"><span class="v16 ssa-value">v16</span> <span class="l5 line-number">(5)</span> = Store &lt;mem&gt; {int} <span class="v6 ssa-value">v6</span> <span class="v14 ssa-value">v14</span> <span class="v15 ssa-value">v15</span></span></li></ul></li><li class="ssa-end-block"><span class="b1 ssa-block">Ret</span> <span class="v16 ssa-value">v16</span> <span class="l5 line-number">(<b>+5</b>)</span></li></ul><li>name x[int]: <span class="v7 ssa-value">v7</span> </li><li>name y[int]: <span class="v8 ssa-value">v8</span> </li><li>name z[int]: <span class="v10 ssa-value">v10</span> </li></code></td>
<td id="early-fuse--+--decompose-builtin--+--softfloat--+--late-opt--+--dead-auto-elim--+--generic-deadcode-col" class="collapsed"><div>early fuse  +  decompose builtin  +  softfloat  +  late opt  +  dead auto elim  +  generic deadcode</div></td><td id="early-fuse--+--decompose-builtin--+--softfloat--+--late-opt--+--dead-auto-elim--+--generic-deadcode-exp" class="hash-8de2550e6da5ac53312e4d23baa357977abccd26a88b34cd22b12175ca5979cf"><h2>early fuse <span class="stats">[355 ns]</span></h2><h2>decompose builtin <span class="stats">[2893 ns]</span></h2><h2>softfloat <span class="stats">[221 ns]</span></h2><h2>late opt <span class="stats">[1910 ns]</span></h2><h2>dead auto elim <span class="stats">[148308 ns]</span></h2><h2>generic deadcode <span class="stats">[2607 ns]</span></h2><code><ul class="b1 ssa-print-func "><li class="ssa-start-block"><span class="b1 ssa-block">b1</span>:<button onclick="hideBlock(this)">-</button></li><li class="ssa-value-list"><ul><li class="ssa-long-value "><span class="v1 ssa-long-value"><span class="v1 ssa-value">v1</span> <span class="no-line-number">(?)</span> = InitMem &lt;mem&gt;</span></li><li class="ssa-long-value "><span class="v2 ssa-long-value"><span class="v2 ssa-value">v2</span> <span class="no-line-number">(?)</span> = SP &lt;uintptr&gt;</span></li><li class="ssa-long-value "><span class="v6 ssa-long-value"><span class="v6 ssa-value">v6</span> <span class="no-line-number">(?)</span> = LocalAddr &lt;*int&gt; {~r2} <span class="v2 ssa-value">v2</span> <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v7 ssa-long-value"><span class="v7 ssa-value">v7</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {x} (x[int])</span></li><li class="ssa-long-value "><span class="v8 ssa-long-value"><span class="v8 ssa-value">v8</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {y} (y[int])</span></li><li class="ssa-long-value "><span class="v10 ssa-long-value"><span class="v10 ssa-value">v10</span> <span class="no-line-number">(?)</span> = Const64 &lt;int&gt; [6] (z[int])</span></li><li class="ssa-long-value "><span class="v13 ssa-long-value"><span class="v13 ssa-value">v13</span> <span class="l5 line-number">(5)</span> = Mul64 &lt;int&gt; <span class="v8 ssa-value">v8</span> <span class="v10 ssa-value">v10</span></span></li><li class="ssa-long-value "><span class="v15 ssa-long-value"><span class="v15 ssa-value">v15</span> <span class="l5 line-number">(<s>5</s>)</span> = VarDef &lt;mem&gt; {~r2} <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v9 ssa-long-value"><span class="v9 ssa-value">v9</span> <span class="l5 line-number">(<b>+5</b>)</span> = Const64 &lt;uint64&gt; [3]</span></li><li class="ssa-long-value "><span class="v12 ssa-long-value"><span class="v12 ssa-value">v12</span> <span class="l5 line-number">(<b>+5</b>)</span> = Lsh64x64 &lt;int&gt; [false] <span class="v7 ssa-value">v7</span> <span class="v9 ssa-value">v9</span></span></li><li class="ssa-long-value "><span class="v14 ssa-long-value"><span class="v14 ssa-value">v14</span> <span class="l5 line-number">(5)</span> = Add64 &lt;int&gt; <span class="v12 ssa-value">v12</span> <span class="v13 ssa-value">v13</span></span></li><li class="ssa-long-value "><span class="v16 ssa-long-value"><span class="v16 ssa-value">v16</span> <span class="l5 line-number">(5)</span> = Store &lt;mem&gt; {int} <span class="v6 ssa-value">v6</span> <span class="v14 ssa-value">v14</span> <span class="v15 ssa-value">v15</span></span></li></ul></li><li class="ssa-end-block"><span class="b1 ssa-block">Ret</span> <span class="v16 ssa-value">v16</span> <span class="l5 line-number">(<b>+5</b>)</span></li></ul><li>name x[int]: <span class="v7 ssa-value">v7</span> </li><li>name y[int]: <span class="v8 ssa-value">v8</span> </li><li>name z[int]: <span class="v10 ssa-value">v10</span> </li></code></td>
<td id="check-bce--+--branchelim--+--late-fuse--+--dse--+--writebarrier--+--lower-col" class="collapsed"><div>check bce  +  branchelim  +  late fuse  +  dse  +  writebarrier  +  lower</div></td><td id="check-bce--+--branchelim--+--late-fuse--+--dse--+--writebarrier--+--lower-exp" class="hash-1b511c04d8d070814a224cbcef17510784dd66b66ca61f6f88c6af987a133e16"><h2>check bce <span class="stats">[176 ns]</span></h2><h2>branchelim <span class="stats">[642 ns]</span></h2><h2>late fuse <span class="stats">[284 ns]</span></h2><h2>dse <span class="stats">[2502 ns]</span></h2><h2>writebarrier <span class="stats">[938 ns]</span></h2><h2>lower <span class="stats">[2490728 ns]</span></h2><code><ul class="b1 ssa-print-func "><li class="ssa-start-block"><span class="b1 ssa-block">b1</span>:<button onclick="hideBlock(this)">-</button></li><li class="ssa-value-list"><ul><li class="ssa-long-value "><span class="v1 ssa-long-value"><span class="v1 ssa-value">v1</span> <span class="no-line-number">(?)</span> = InitMem &lt;mem&gt;</span></li><li class="ssa-long-value "><span class="v2 ssa-long-value"><span class="v2 ssa-value">v2</span> <span class="no-line-number">(?)</span> = SP &lt;uintptr&gt;</span></li><li class="ssa-long-value dead-value"><span class="v6 ssa-long-value"><span class="v6 ssa-value">v6</span> <span class="no-line-number">(?)</span> = LEAQ &lt;*int&gt; {~r2} <span class="v2 ssa-value">v2</span></span></li><li class="ssa-long-value "><span class="v7 ssa-long-value"><span class="v7 ssa-value">v7</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {x} (x[int])</span></li><li class="ssa-long-value "><span class="v8 ssa-long-value"><span class="v8 ssa-value">v8</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {y} (y[int])</span></li><li class="ssa-long-value dead-value"><span class="v10 ssa-long-value"><span class="v10 ssa-value">v10</span> <span class="no-line-number">(?)</span> = MOVQconst &lt;int&gt; [6] (z[int])</span></li><li class="ssa-long-value "><span class="v15 ssa-long-value"><span class="v15 ssa-value">v15</span> <span class="l5 line-number">(<s>5</s>)</span> = VarDef &lt;mem&gt; {~r2} <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value dead-value"><span class="v9 ssa-long-value"><span class="v9 ssa-value">v9</span> <span class="l5 line-number">(<b>+5</b>)</span> = MOVQconst &lt;uint64&gt; [3]</span></li><li class="ssa-long-value "><span class="v11 ssa-long-value"><span class="v11 ssa-value">v11</span> <span class="l5 line-number">(<b>+5</b>)</span> = SHLQconst &lt;int&gt; [3] <span class="v7 ssa-value">v7</span></span></li><li class="ssa-long-value dead-value"><span class="v5 ssa-long-value"><span class="v5 ssa-value">v5</span> <span class="l5 line-number">(<b>+5</b>)</span> = MOVQconst &lt;int&gt; [-1]</span></li><li class="ssa-long-value dead-value"><span class="v4 ssa-long-value"><span class="v4 ssa-value">v4</span> <span class="l5 line-number">(<b>+5</b>)</span> = FlagLT_ULT &lt;flags&gt;</span></li><li class="ssa-long-value "><span class="v3 ssa-long-value"><span class="v3 ssa-value">v3</span> <span class="l5 line-number">(5)</span> = LEAQ2 &lt;int&gt; <span class="v8 ssa-value">v8</span> <span class="v8 ssa-value">v8</span></span></li><li class="ssa-long-value dead-value"><span class="v13 ssa-long-value"><span class="v13 ssa-value">v13</span> <span class="l5 line-number">(5)</span> = SHLQconst &lt;int&gt; [1] <span class="v3 ssa-value">v3</span></span></li><li class="ssa-long-value "><span class="v14 ssa-long-value"><span class="v14 ssa-value">v14</span> <span class="l5 line-number">(5)</span> = LEAQ2 &lt;int&gt; <span class="v11 ssa-value">v11</span> <span class="v3 ssa-value">v3</span></span></li><li class="ssa-long-value "><span class="v16 ssa-long-value"><span class="v16 ssa-value">v16</span> <span class="l5 line-number">(5)</span> = MOVQstore &lt;mem&gt; {~r2} <span class="v2 ssa-value">v2</span> <span class="v14 ssa-value">v14</span> <span class="v15 ssa-value">v15</span></span></li></ul></li><li class="ssa-end-block"><span class="b1 ssa-block">Ret</span> <span class="v16 ssa-value">v16</span> <span class="l5 line-number">(<b>+5</b>)</span></li></ul><li>name x[int]: <span class="v7 ssa-value">v7</span> </li><li>name y[int]: <span class="v8 ssa-value">v8</span> </li><li>name z[int]: <span class="v10 ssa-value">v10</span> </li></code></td>
<td id="addressing-modes--+--lowered-deadcode-for-cse-col" class="collapsed"><div>addressing modes  +  lowered deadcode for cse</div></td><td id="addressing-modes--+--lowered-deadcode-for-cse-exp" class="hash-c2bba756b15f9095fc7a93d9cd97281fbf96eba8e4ec9289b22c18f8edaf20ff"><h2>addressing modes <span class="stats">[1516 ns]</span></h2><h2>lowered deadcode for cse <span class="stats">[4848 ns]</span></h2><code><ul class="b1 ssa-print-func "><li class="ssa-start-block"><span class="b1 ssa-block">b1</span>:<button onclick="hideBlock(this)">-</button></li><li class="ssa-value-list"><ul><li class="ssa-long-value "><span class="v1 ssa-long-value"><span class="v1 ssa-value">v1</span> <span class="no-line-number">(?)</span> = InitMem &lt;mem&gt;</span></li><li class="ssa-long-value "><span class="v2 ssa-long-value"><span class="v2 ssa-value">v2</span> <span class="no-line-number">(?)</span> = SP &lt;uintptr&gt;</span></li><li class="ssa-long-value "><span class="v7 ssa-long-value"><span class="v7 ssa-value">v7</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {x} (x[int])</span></li><li class="ssa-long-value "><span class="v8 ssa-long-value"><span class="v8 ssa-value">v8</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {y} (y[int])</span></li><li class="ssa-long-value "><span class="v15 ssa-long-value"><span class="v15 ssa-value">v15</span> <span class="l5 line-number">(<s>5</s>)</span> = VarDef &lt;mem&gt; {~r2} <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v11 ssa-long-value"><span class="v11 ssa-value">v11</span> <span class="l5 line-number">(<b>+5</b>)</span> = SHLQconst &lt;int&gt; [3] <span class="v7 ssa-value">v7</span></span></li><li class="ssa-long-value "><span class="v3 ssa-long-value"><span class="v3 ssa-value">v3</span> <span class="l5 line-number">(<b>+5</b>)</span> = LEAQ2 &lt;int&gt; <span class="v8 ssa-value">v8</span> <span class="v8 ssa-value">v8</span></span></li><li class="ssa-long-value "><span class="v14 ssa-long-value"><span class="v14 ssa-value">v14</span> <span class="l5 line-number">(5)</span> = LEAQ2 &lt;int&gt; <span class="v11 ssa-value">v11</span> <span class="v3 ssa-value">v3</span></span></li><li class="ssa-long-value "><span class="v16 ssa-long-value"><span class="v16 ssa-value">v16</span> <span class="l5 line-number">(5)</span> = MOVQstore &lt;mem&gt; {~r2} <span class="v2 ssa-value">v2</span> <span class="v14 ssa-value">v14</span> <span class="v15 ssa-value">v15</span></span></li></ul></li><li class="ssa-end-block"><span class="b1 ssa-block">Ret</span> <span class="v16 ssa-value">v16</span> <span class="l5 line-number">(<b>+5</b>)</span></li></ul><li>name x[int]: <span class="v7 ssa-value">v7</span> </li><li>name y[int]: <span class="v8 ssa-value">v8</span> </li></code></td>
<td id="lowered-cse--+--elim-unread-autos--+--tighten-tuple-selectors--+--lowered-deadcode--+--checkLower--+--late-phielim--+--late-copyelim--+--tighten--+--late-deadcode--+--critical--+--phi-tighten--+--likelyadjust--+--layout--+--schedule-col" class="collapsed"><div>lowered cse  +  elim unread autos  +  tighten tuple selectors  +  lowered deadcode  +  checkLower  +  late phielim  +  late copyelim  +  tighten  +  late deadcode  +  critical  +  phi tighten  +  likelyadjust  +  layout  +  schedule</div></td><td id="lowered-cse--+--elim-unread-autos--+--tighten-tuple-selectors--+--lowered-deadcode--+--checkLower--+--late-phielim--+--late-copyelim--+--tighten--+--late-deadcode--+--critical--+--phi-tighten--+--likelyadjust--+--layout--+--schedule-exp" class="hash-0aae01b95d4a2c64d25568808cae2d78fa92d4ef6542b2c274682b645d840d86"><h2>lowered cse <span class="stats">[6508 ns]</span></h2><h2>elim unread autos <span class="stats">[863 ns]</span></h2><h2>tighten tuple selectors <span class="stats">[427 ns]</span></h2><h2>lowered deadcode <span class="stats">[2135 ns]</span></h2><h2>checkLower <span class="stats">[422 ns]</span></h2><h2>late phielim <span class="stats">[485 ns]</span></h2><h2>late copyelim <span class="stats">[419 ns]</span></h2><h2>tighten <span class="stats">[3880 ns]</span></h2><h2>late deadcode <span class="stats">[1806 ns]</span></h2><h2>critical <span class="stats">[315 ns]</span></h2><h2>phi tighten <span class="stats">[224 ns]</span></h2><h2>likelyadjust <span class="stats">[364 ns]</span></h2><h2>layout <span class="stats">[1184 ns]</span></h2><h2>schedule <span class="stats">[5377 ns]</span></h2><code><ul class="b1 ssa-print-func "><li class="ssa-start-block"><span class="b1 ssa-block">b1</span>:<button onclick="hideBlock(this)">-</button></li><li class="ssa-value-list"><ul><li class="ssa-long-value "><span class="v8 ssa-long-value"><span class="v8 ssa-value">v8</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {y} (y[int])</span></li><li class="ssa-long-value "><span class="v7 ssa-long-value"><span class="v7 ssa-value">v7</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {x} (x[int])</span></li><li class="ssa-long-value "><span class="v1 ssa-long-value"><span class="v1 ssa-value">v1</span> <span class="no-line-number">(?)</span> = InitMem &lt;mem&gt;</span></li><li class="ssa-long-value "><span class="v15 ssa-long-value"><span class="v15 ssa-value">v15</span> <span class="l5 line-number">(<s>5</s>)</span> = VarDef &lt;mem&gt; {~r2} <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v2 ssa-long-value"><span class="v2 ssa-value">v2</span> <span class="no-line-number">(?)</span> = SP &lt;uintptr&gt;</span></li><li class="ssa-long-value "><span class="v11 ssa-long-value"><span class="v11 ssa-value">v11</span> <span class="l5 line-number">(<b>+5</b>)</span> = SHLQconst &lt;int&gt; [3] <span class="v7 ssa-value">v7</span></span></li><li class="ssa-long-value "><span class="v3 ssa-long-value"><span class="v3 ssa-value">v3</span> <span class="l5 line-number">(<b>+5</b>)</span> = LEAQ2 &lt;int&gt; <span class="v8 ssa-value">v8</span> <span class="v8 ssa-value">v8</span></span></li><li class="ssa-long-value "><span class="v14 ssa-long-value"><span class="v14 ssa-value">v14</span> <span class="l5 line-number">(5)</span> = LEAQ2 &lt;int&gt; <span class="v11 ssa-value">v11</span> <span class="v3 ssa-value">v3</span></span></li><li class="ssa-long-value "><span class="v16 ssa-long-value"><span class="v16 ssa-value">v16</span> <span class="l5 line-number">(5)</span> = MOVQstore &lt;mem&gt; {~r2} <span class="v2 ssa-value">v2</span> <span class="v14 ssa-value">v14</span> <span class="v15 ssa-value">v15</span></span></li></ul></li><li class="ssa-end-block"><span class="b1 ssa-block">Ret</span> <span class="v16 ssa-value">v16</span> <span class="l5 line-number">(<b>+5</b>)</span></li></ul><li>name x[int]: <span class="v7 ssa-value">v7</span> </li><li>name y[int]: <span class="v8 ssa-value">v8</span> </li></code></td>
<td id="late-nilcheck--+--flagalloc--+--regalloc-col" class="collapsed"><div>late nilcheck  +  flagalloc  +  regalloc</div></td><td id="late-nilcheck--+--flagalloc--+--regalloc-exp" class="hash-ad68a2186bbb9d3eeb9f929ff3c70748c2d0a24b3ddd875cfcbe95ac41f21f6a"><h2>late nilcheck <span class="stats">[1529 ns]</span></h2><h2>flagalloc <span class="stats">[2082 ns]</span></h2><h2>regalloc <span class="stats">[45172 ns]</span></h2><code><ul class="b1 ssa-print-func "><li class="ssa-start-block"><span class="b1 ssa-block">b1</span>:<button onclick="hideBlock(this)">-</button></li><li class="ssa-value-list"><ul><li class="ssa-long-value "><span class="v8 ssa-long-value"><span class="v8 ssa-value">v8</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {y} : y[int] (y[int])</span></li><li class="ssa-long-value "><span class="v7 ssa-long-value"><span class="v7 ssa-value">v7</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {x} : x[int] (x[int])</span></li><li class="ssa-long-value "><span class="v1 ssa-long-value"><span class="v1 ssa-value">v1</span> <span class="no-line-number">(?)</span> = InitMem &lt;mem&gt;</span></li><li class="ssa-long-value "><span class="v15 ssa-long-value"><span class="v15 ssa-value">v15</span> <span class="l5 line-number">(<s>5</s>)</span> = VarDef &lt;mem&gt; {~r2} <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v2 ssa-long-value"><span class="v2 ssa-value">v2</span> <span class="no-line-number">(?)</span> = SP &lt;uintptr&gt; : SP</span></li><li class="ssa-long-value "><span class="v4 ssa-long-value"><span class="v4 ssa-value">v4</span> <span class="l5 line-number">(<s>5</s>)</span> = LoadReg &lt;int&gt; <span class="v7 ssa-value">v7</span> : AX</span></li><li class="ssa-long-value "><span class="v11 ssa-long-value"><span class="v11 ssa-value">v11</span> <span class="l5 line-number">(<b>+5</b>)</span> = SHLQconst &lt;int&gt; [3] <span class="v4 ssa-value">v4</span> : AX</span></li><li class="ssa-long-value "><span class="v5 ssa-long-value"><span class="v5 ssa-value">v5</span> <span class="l5 line-number">(<s>5</s>)</span> = LoadReg &lt;int&gt; <span class="v8 ssa-value">v8</span> : CX</span></li><li class="ssa-long-value "><span class="v3 ssa-long-value"><span class="v3 ssa-value">v3</span> <span class="l5 line-number">(<b>+5</b>)</span> = LEAQ2 &lt;int&gt; <span class="v5 ssa-value">v5</span> <span class="v5 ssa-value">v5</span> : CX</span></li><li class="ssa-long-value "><span class="v14 ssa-long-value"><span class="v14 ssa-value">v14</span> <span class="l5 line-number">(5)</span> = LEAQ2 &lt;int&gt; <span class="v11 ssa-value">v11</span> <span class="v3 ssa-value">v3</span> : AX</span></li><li class="ssa-long-value "><span class="v16 ssa-long-value"><span class="v16 ssa-value">v16</span> <span class="l5 line-number">(5)</span> = MOVQstore &lt;mem&gt; {~r2} <span class="v2 ssa-value">v2</span> <span class="v14 ssa-value">v14</span> <span class="v15 ssa-value">v15</span></span></li></ul></li><li class="ssa-end-block"><span class="b1 ssa-block">Ret</span> <span class="v16 ssa-value">v16</span> <span class="l5 line-number">(<b>+5</b>)</span></li></ul><li>name x[int]: <span class="v7 ssa-value">v7</span> </li><li>name y[int]: <span class="v8 ssa-value">v8</span> </li></code></td>
<td id="loop-rotate--+--stackframe--+--trim-col" class="collapsed"><div>loop rotate  +  stackframe  +  trim</div></td><td id="loop-rotate--+--stackframe--+--trim-exp" class="hash-9475bd53bcc4c442fa9acc73822b6e0a94f4456c1f49d21cfd5bb6d6f2279507"><h2>loop rotate <span class="stats">[228 ns]</span></h2><h2>stackframe <span class="stats">[1287 ns]</span></h2><h2>trim <span class="stats">[244 ns]</span></h2><code><ul class="b1 ssa-print-func "><li class="ssa-start-block"><span class="b1 ssa-block">b1</span>:<button onclick="hideBlock(this)">-</button></li><li class="ssa-value-list"><ul><li class="ssa-long-value "><span class="v8 ssa-long-value"><span class="v8 ssa-value">v8</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {y} : y[int] (y[int])</span></li><li class="ssa-long-value "><span class="v7 ssa-long-value"><span class="v7 ssa-value">v7</span> <span class="l3 line-number">(<s>3</s>)</span> = Arg &lt;int&gt; {x} : x[int] (x[int])</span></li><li class="ssa-long-value "><span class="v1 ssa-long-value"><span class="v1 ssa-value">v1</span> <span class="no-line-number">(?)</span> = InitMem &lt;mem&gt;</span></li><li class="ssa-long-value "><span class="v15 ssa-long-value"><span class="v15 ssa-value">v15</span> <span class="l5 line-number">(<s>5</s>)</span> = VarDef &lt;mem&gt; {~r2} <span class="v1 ssa-value">v1</span></span></li><li class="ssa-long-value "><span class="v2 ssa-long-value"><span class="v2 ssa-value">v2</span> <span class="no-line-number">(?)</span> = SP &lt;uintptr&gt; : SP</span></li><li class="ssa-long-value "><span class="v4 ssa-long-value"><span class="v4 ssa-value">v4</span> <span class="l5 line-number">(<s>5</s>)</span> = LoadReg &lt;int&gt; <span class="v7 ssa-value">v7</span> : AX</span></li><li class="ssa-long-value "><span class="v11 ssa-long-value"><span class="v11 ssa-value">v11</span> <span class="l5 line-number">(<b>+5</b>)</span> = SHLQconst &lt;int&gt; [3] <span class="v4 ssa-value">v4</span> : AX</span></li><li class="ssa-long-value "><span class="v5 ssa-long-value"><span class="v5 ssa-value">v5</span> <span class="l5 line-number">(<s>5</s>)</span> = LoadReg &lt;int&gt; <span class="v8 ssa-value">v8</span> : CX</span></li><li class="ssa-long-value "><span class="v3 ssa-long-value"><span class="v3 ssa-value">v3</span> <span class="l5 line-number">(<b>+5</b>)</span> = LEAQ2 &lt;int&gt; <span class="v5 ssa-value">v5</span> <span class="v5 ssa-value">v5</span> : CX</span></li><li class="ssa-long-value "><span class="v14 ssa-long-value"><span class="v14 ssa-value">v14</span> <span class="l5 line-number">(5)</span> = LEAQ2 &lt;int&gt; <span class="v11 ssa-value">v11</span> <span class="v3 ssa-value">v3</span> : AX</span></li><li class="ssa-long-value "><span class="v16 ssa-long-value"><span class="v16 ssa-value">v16</span> <span class="l5 line-number">(5)</span> = MOVQstore &lt;mem&gt; {~r2} <span class="v2 ssa-value">v2</span> <span class="v14 ssa-value">v14</span> <span class="v15 ssa-value">v15</span></span></li></ul></li><li class="ssa-end-block"><span class="b1 ssa-block">Ret</span> <span class="v16 ssa-value">v16</span> <span class="l5 line-number">(<b>+5</b>)</span></li></ul><li>name x[int]: <span class="v7 ssa-value">v7</span> </li><li>name y[int]: <span class="v8 ssa-value">v8</span> </li></code></td>
<td id="genssa-col" class="collapsed"><div>genssa</div></td><td id="genssa-exp" class="ssa-prog"><h2>genssa</h2><code><dl class="ssa-gen"><dt class="ssa-prog-src"></dt><dd class="ssa-prog"># /Users/mac/go/src/gitee.com/shirdonl/goAdvanced/chapter2/2.3.4-compiler_debug.go</dd><dt class="ssa-prog-src"></dt><dd class="ssa-prog">00000 <span class="l3 line-number">(3)</span> TEXT	&#34;&#34;.Func(SB), ABIInternal</dd><dt class="ssa-prog-src"></dt><dd class="ssa-prog">00001 <span class="l3 line-number">(3)</span> FUNCDATA	$0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)</dd><dt class="ssa-prog-src"></dt><dd class="ssa-prog">00002 <span class="l3 line-number">(3)</span> FUNCDATA	$1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)</dd><dt class="ssa-prog-src"><span class="v4 ssa-value">v4</span></dt><dd class="ssa-prog">00003 <span class="l5 line-number">(<b>+5</b>)</span> MOVQ	&#34;&#34;.x(SP), AX</dd><dt class="ssa-prog-src"><span class="v11 ssa-value">v11</span></dt><dd class="ssa-prog">00004 <span class="l5 line-number">(<s>5</s>)</span> SHLQ	$3, AX</dd><dt class="ssa-prog-src"><span class="v5 ssa-value">v5</span></dt><dd class="ssa-prog">00005 <span class="l5 line-number">(<s>5</s>)</span> MOVQ	&#34;&#34;.y+8(SP), CX</dd><dt class="ssa-prog-src"><span class="v3 ssa-value">v3</span></dt><dd class="ssa-prog">00006 <span class="l5 line-number">(<s>5</s>)</span> LEAQ	(CX)(CX*2), CX</dd><dt class="ssa-prog-src"><span class="v14 ssa-value">v14</span></dt><dd class="ssa-prog">00007 <span class="l5 line-number">(<s>5</s>)</span> LEAQ	(AX)(CX*2), AX</dd><dt class="ssa-prog-src"><span class="v16 ssa-value">v16</span></dt><dd class="ssa-prog">00008 <span class="l5 line-number">(<s>5</s>)</span> MOVQ	AX, &#34;&#34;.~r2+16(SP)</dd><dt class="ssa-prog-src"><b><span class="b1 ssa-block">b1</span></b></dt><dd class="ssa-prog">00009 <span class="l5 line-number">(<s>5</s>)</span> RET</dd><dt class="ssa-prog-src"></dt><dd class="ssa-prog">00010 <span class="l? line-number">(?)</span> END</dd></dl></code></td>
</tr></table></body></html>